package login;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * Cookie 和 Session:
 *  模拟实现一个 登录 的案例:
 *  1. 登录页面 用户可以填写用户名和密码.
 *  2. Servlet 处理登录请求.
 *  3. 使用另一个 Servlet 来生成主页内容(登录成功后跳转的页面.)
 */

// 使用这个类来处理登录请求.
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1. 从请求中获取到页面提交的用户名和密码.
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        // 2. 验证用户名 密码是否正确.
        //    正常操作要查数据库 此处为了简单 直接写为硬编码了.
        // 假定正确的 用户名,密码 是 2100770248, 1111.
        if ("2100770248".equals(username) && "1111".equals(password)) {
            // 登录成功.
            // 1. 创建一个会话. 用用户刚登陆成功, 之前没有会话,重新分配一个新的会话给用户.
            // 此处的 getSession 会做以下的事:
            //      * 创建一个 sessionId 和 一个 session 对象.
            //      * 把这两个内容通过键值对的形式插入到内存的 哈希表 中.
            //      * 把sessionId 通过 Set-Cookie 写到响应中.
            HttpSession session = req.getSession(true);
            // 设置 "键值对". (HttpSession 对象自身也相当于是一个 哈希表.)
            session.setAttribute("username","2100770248");
            // 2. 让响应重定向到 主页 .
            resp.sendRedirect("index");
        } else {
            // 登录失败.
            resp.setStatus(403);
            resp.setContentType("text/html;charset=utf8");
            resp.getWriter().write("用户名或密码错误!");
        }
    }
}
